<?php

namespace app\job;

use app\admin\service\PhoneService;
use app\api\service\GongzonghaoService;
use think\Env;
use think\queue\Job;

/**
 * 消费者类
 * 用于处理队列中的任务
 */
class InstallApp
{
    /**
     * fire是消息队列默认调用的方法
     * @param Job $job 当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        //有效消息到达消费者时可能已经不再需要执行了
        if(!$this->checkJob($data)){
            $job->delete();
            return;
        }

        //执行业务处理
        if($this->doJob($data)){
            $job->delete();//任务执行成功后删除
        }else{
            $job->delete();
        }
    }

    /**
     * 消息在到达消费者时可能已经不需要执行了
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean 任务执行的结果
     */
    private function checkJob($data)
    {
        //验证数据
//        $id = $data["id"];
        if(isset($data['instance_code'])){
            return true;
        }else{
            var_dump('参数有误！');
            return true;
        }
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     */
    private function doJob($data)
    {
        $order_no = $data['order_no'];
        $sysConfig = getConfByType('basic');
        $app_ids = $sysConfig['app_ids'];
        if(empty($app_ids)){
            return true;
        }
        $app_idsArr = explode(',',$app_ids);
        $phoneServiceHandle = new PhoneService();
        foreach ($app_idsArr as $app_id){
            $res = $phoneServiceHandle->previweInstallapp($data['instance_code'],$app_id);
            if($res == false){
                $this->vvlog("{$order_no}=={$data['instance_code']}安装插件{$app_id}失败》》".$phoneServiceHandle->errorMsg,'install_error');
            }
        }


        return true;
    }

    // 消息队列执行失败后会自动执行该方法
    public function failed($data)
    {
        ppd('消息队列达到最大重复执行次数后失败：' . json_encode($data));
    }
    public function vvlog($msg,$index){
        var_dump($msg);
        trace_log($msg,$index);
    }
}
